
import logging

import requests

logger = logging.getLogger('sendmail')

sendcloud_url_normal = 'http://api.sendcloud.net/apiv2/mail/send'


def sendcloud_normal(apiUser, apiKey, _from, to, subject, fromName, cc, labelId='',
                     html='', plain='', useNotification='false', attachments=None):
    '''
    http://www.sendcloud.net/doc/email_v2/send_email/

    参数              类型              必须              说明
    apiUser           string              是               API_USER
    apiKey            string              是               API_KEY
    from              string              是               发件人地址. 举例: support@ifaxin.com, 为了更高的送达率，建议from域名后缀与发信域名一致。
    to                string              *               收件人地址. 多个地址使用';'分隔, 如 ben@ifaxin.com;joe@ifaxin.com
    subject           string              是               标题. 不能为空
    html              string              *               邮件的内容. 邮件格式为 text/html
    contentSummary    string              *               邮件摘要. 该字段传入值后，若原邮件已有摘要，会覆盖原邮件的摘要；若原邮件中没有摘要将会插入摘要。了解邮件摘要的更多内容，请点击这里        # noqa
    fromName          string              否               发件人名称. 显示如: ifaxin客服支持<support@ifaxin.com>
    cc                string              否               抄送地址. 多个地址使用';'分隔
    labelId           int                 否               本次发送所使用的标签ID. 此标签需要事先创建
    attachments       file                否               邮件附件. 发送附件时, 必须使用 multipart/form-data 进行 post 提交 (表单提交)
    plain             string              否               邮件的内容. 邮件格式为 text/plain
    useNotification   string (true, false)                否               默认值: false. 是否使用回执

    :return:
    '''
    param = {
        'apiUser': apiUser,
        'apiKey': apiKey,
        'from': _from,
        'to': to,
        'subject': subject,
        'html': html,
        'fromName': fromName,
        'cc': cc if cc else '',
        'labelId': labelId,
        'useNotification': useNotification,
    }
    _files = []
    if attachments:
        for path in attachments:
            fname = path.split('/')[-1]
            _files.append(('attachments', (fname, open(path), 'application/octet-stream')))

    try:
        if not attachments:
            resp = requests.post(sendcloud_url_normal, data=param, timeout=5)  # 5s超时
            res = resp.json()
            return res['result']
        else:
            resp = requests.post(sendcloud_url_normal, files=_files, data=param, timeout=5)  # 5s超时
            res = resp.json()
            return res['result']
    except Exception as e:
        logger.exception('邮件发送失败! %s' % param, e)
        raise e
